home *** CD-ROM | disk | FTP | other *** search
- IF NOT lasm
- .printx * CPXVDU.ASM *
- ENDIF ;NOT lasm
- ; KERMIT - (Celtic for "FREE")
- ;
- ; This is the CP/M-80 implementation of the Columbia University
- ; KERMIT file transfer protocol.
- ;
- ; Version 4.0
- ;
- ; Copyright June 1981,1982,1983,1984
- ; Columbia University
- ;
- ; Originally written by Bill Catchings of the Columbia University Center for
- ; Computing Activities, 612 W. 115th St., New York, NY 10025.
- ;
- ; Contributions by Frank da Cruz, Daphne Tzoar, Bernie Eiben,
- ; Bruce Tanner, Nick Bush, Greg Small, Kimmo Laaksonen, Jeff Damens, and many
- ; others.
- ;
- ;edit 6, 12-Oct-1990 by MF. Added a semicolon to the comment "If we
- ; need cursor ..." so it isn't seen as an undefined symbol
- ; edit 5, 20 July by OBSchou. Put in the cursor positioning code for
- ; all the terminal supported, and moved the vtval EQUs and defesc EQUs
- ; here if the system requires andn external terminal. If the system
- ; has a 'built in' terminal (ie own scrteen driver) you will not come
- ; to this file, so you must declare these three lables etc in your
- ; own code.
- ; This will allow only those systems requiring a terminal to require
- ; CPXVDU.ASM during assembly.
- ;
- ; edit 4, 16 July, 1987 by OBSchou for will Rose.
- ; Added code for Ampro 230 terminal
- ;
- ; edit 3, 15 July, 1987 by OBSchou for David Moore. Added adm22 terminal
- ; codes.
- ;
- ; edit 2 21 May, 1987 by OBSchou. Added in definitions for Hazeltine 1500
- ; submitted by Colin Burns of the Institute of Neurological Sciences
- ; in Glasgow.
- ; edit 1 ??? date. Split the terminal codes off from the CPXSYS.ASM file
- ;
- vduver: db 'CPXVDU.ASM (6) 12-Oct-1990 $' ;file, edit version,, date.
-
-
- ; First, print out what terminal (if any) we are assembling for
-
- IF crt
- .printx * generic CRT selected *
- ENDIF
-
- IF adm3a
- .printx * ADM3A selected *
- ENDIF
-
- IF adm22
- .printx * ADM22 selected *
- ENDIF
-
- IF smrtvd ;[7]
- .printx * Netronics Smartvid-80 selected *
- ENDIF ;[7]
-
- IF tvi912
- .printx * TVI912/920 selected *
- ENDIF
-
- IF tvi925
- .printx * TVI925 selected *
- ENDIF
-
- IF vt52
- .printx * VT52 selected *
- ENDIF
-
- IF vt100
- .printx * VT100 selected *
- ENDIF
-
- IF am230
- .printx * Ampro 230 terminal selected *
- ENDIF
-
- IF wyse
- .printx * Wyse 100 terminal selected *
- ENDIF
- ;
-
- ;
- ; If we need cursor positioning, here is the code to do it
- ;
- ; Screen manipulation routines
- ; csrpos - move to row B, column C
- ;
- ; csrpos for terminals that use a leadin sequence followed
- ; by (row + 31.) and (column + 31.)
- ;
- IF NOT (vt100 OR crt OR h1500)
- csrpos: push b ; save coordinates
- lxi d,curldn ; get cursor leadin sequence
- call prtstr ; print it
- pop h ; restore coordinates
- mov a,h ; get row
- adi (' '-1) ; space is row one
- mov e,a
- push h
- call outcon ; output row
- pop h
- mov a,l ; get column
- adi (' '-1) ; space is column one
- mov e,a
- jmp outcon ; output it and return
- ENDIF;NOT (vt100 OR crt OR h1500)
- ;
- ;
- ;
- ;
- ; csrpos for ANSI terminals
- ;
- IF vt100
- csrpos: push b ; save coordinates
- lxi d,curldn ; get cursor leadin sequence
- call prtstr ; print it
- pop h ; peek at coordinates
- push h ; then save away again
- mov l,h ; l = row
- mvi h,0 ; hl = row
- call nout ; output in decimal
- mvi e,';' ; follow with semicolon
- call outcon ; print it
- pop h ; restore column
- mvi h,0 ; hl = column
- call nout
- mvi e,'H' ; terminate with 'move cursor' command
- jmp outcon ; output it and return
- ENDIF;vt100
-
- ;Definition for Hazeltine 1500 does things a little strange.
- ;
- IF h1500
- csrpos: push b ; save coordinates
- lxi d,curldn ; get cursor leadin sequence
- call prtstr ; print it
- pop h ; restore coordinates
- mov a,l ; get col
- nop
- nop
- ; adi (' '-1) ; space is row one
- mov e,a
- push h
- call outcon ; output row
- pop h
- mov a,h ; get row
- adi (' '-1) ; space is column one
- mov e,a
- jmp outcon ; output it and return
- ENDIF; h1500
-
-
- IF crt ; systems without cursor positioning
- csrpos: ret ; dummy routine referenced by linkage section
- ENDIF;crt
- ;
- ;
- ;
- ; Now for the rest of CPXVDU.ASM
- ;
- ;
- ;
- IF crt ;Set flags etc for systems with CRT selected
- defesc EQU '\'-100O ;Still Control-\ (just ran out of room...)
- vtval EQU 0FFH ; we can't support VT52 emulation
- ttytyp: db 'Generic (Dumb) CRT Terminal type selected $'
- ENDIF;crt
-
- ;
-
- IF vt52 ; DEC VT52
- ttytyp: db 'VT52$'
- ENDIF;vt52
-
- IF vt52
- vtval EQU 0 ; we don't need VT52 emulation
- defesc EQU '\'-100O ;Still Control-\ (just ran out of room...)
- outlin: db esc,'H',esc,'J',cr,lf,tab,tab,'$'
- erascr: db esc,'H',esc,'J$' ;Clear screen and go home.
- eralin: db cr,esc,'K$' ;Clear line.
- curldn: db esc,'Y$' ;cursor leadin
- ttab: ;Table start location.
- ta: db esc,'A$',0 ;Cursor up.
- tb: db esc,'B$',0 ;Cursor down.
- tc: db esc,'C$',0 ;Cursor right.
- td: db esc,'D$',0 ;Cursor left
- te: db esc,'E$',0 ;Clear display
- tf: db esc,'F$',0 ;Enter Graphics Mode
- tg: db esc,'G$',0 ;Exit Graphics mode
- th: db esc,'H$',0 ;Cursor home.
- ti: db esc,'I$',0 ;Reverse linefeed.
- tj: db esc,'J$',0 ;Clear to end of screen.
- tk: db esc,'K$',0 ;Clear to end of line.
- ENDIF;vt52
- ;
-
- IF adm22
- vtval EQU 1 ; we can do VT52 emulation
- defesc EQU '\'-100O ;Still Control-\ (just ran out of room...)
- ttytyp: db 'ADM22$'
- outlin: db 1ah,cr,lf,tab,tab,'$'
- erascr: db 1ah,'$' ;Clear screen and go home.
- eralin: db esc,'>$' ;Clear line.
- curldn: db esc,'=$' ;Cursor lead-in
- ttab: ;Table start location.
- ta: db 0BH,'$',0,0 ;Cursor up.
- tb: db lf,'$',0,0 ;Cursor down.
- tc: db 0CH,'$',0,0 ;Cursor right.
- td: db bs,'$',0,0 ;Cursor left
- te: db 1ah,':$',0 ;Clear display
- tf: db '$',0,0,0 ;(can't) Enter Graphics Mode
- tg: db '$',0,0,0 ;(can't) Exit Graphics mode
- th: db 1EH,'$',0,0 ;Cursor home.
- ti: db 0BH,'$',0,0 ;Reverse linefeed.
- tj: db esc,'Y$',0 ;Clear to end of screen.
- tk: db esc,'T$',0 ;Clear to end of line.
- ENDIF;adm22
- ;
-
- IF am230
- ; Select initial setting for VT-52 emulation flag.
- vtval EQU 1
- defesc EQU '\'-100O ;The default is Control-\ -- it's easier
- ttytyp: db 'Am230$'
- outlin: db 'Z'-64,0,0,cr,lf,'$'
- erascr: db 'Z'-64,0,0,'$' ;Clear screen and home
- eralin: db esc,'R$',0 ;Erase line
- curldn: db cr,esc,'=$' ;Cursor lead-in
- ttab: ;Table start location ;(MUST be 4 bytes each)
- ta: db 'K'-64,'$',0,0 ;Cursor up, stop at top
- tb: db 'V'-64,'$',0,0 ;Cursor down, stop at bottom
- tc: db 'L'-64,'$',0,0 ;Cursor right, stop at right
- td: db 'H'-64,'$',0,0 ;Cursor left, stop at left
- te: db 'Z'-64,0,0,'$' ;Clear display (2 pad nulls)
- tf: db '$',0,0,0 ;(can't) Enter Graphics mode
- tg: db '$',0,0,0 ;(can't) Exit Graphics mode
- th: db 1EH,'$',0,0 ;Cursor home
- ti: db esc,'j$',0 ;Reverse linefeed, scroll
- tj: db esc,'Y$',0 ;Clear to end of sreen
- tk: db esc,'T$',0 ;Clear to end of line
- ENDIF
- ;
- ;
-
-
- IF vt100
- ttytyp: db 'VT100$'
- ENDIF;vt100
-
-
- IF vt100
- ; Note that we cannot support Graphics Mode or the H19 erase-screen command
- ; (<esc>E), because the sequences are more than three bytes.
- defesc EQU '\'-100O ;Still Control-\ (just ran out of room...)
- vtval EQU 0 ; we probably don't want VT52 emulation
- outlin: db esc,3CH,esc,'[H',esc,'[J',cr,lf,tab,tab,'$'
- erascr: db esc,'[H',esc,'[J$' ;Clear screen and go home.
- eralin: db cr,esc,'[K$' ;Clear line.
- curldn: db esc,'[$' ; Cursor leadin
- ttab:
- ta: db esc,'[A$' ; Cursor up.
- tb: db esc,'[B$' ; Cursor down.
- tc: db esc,'[C$' ; Cursor right.
- td: db esc,'[D$' ; Cursor left
- te: db '$',0,0,0 ; (can't) Clear display
- tf: db '$',0,0,0 ; (don't) Enter Graphics Mode
- tg: db '$',0,0,0 ; (don't) Exit Graphics mode
- th: db esc,'[H$' ; Cursor home.
- ti: db esc,'M$',0 ; Reverse linefeed.
- tj: db esc,'[J$' ; Clear to end of screen.
- tk: db esc,'[K$' ; Clear to end of line.
- ENDIF;vt100
- ;
-
- IF gener or cpm3
- sysver: db 'Generic CP/M-80$'
- ENDIF;gener or cpm3
-
-
- IF soroq ;[29] Should this not be with terminals.....
- ttytyp: db 'Soroc IQ-120$'
- outlin: db 1EH,esc,'Y',cr,lf,tab,tab,'$'
- erascr: db 1EH,esc,'Y$' ;clear screen and home cursor
- eralin: db cr,esc,'T$' ;clear line
- curldn: db esc,'=$' ;cursor lead-in string
- delstr: db bs,' ',bs,bs,'$' ;??adjust for echoing delete
- ttab: ;table start location
- ta: db 0BH,'$',0 ;cursor up
- tb: db 0AH,'$',0 ;cursor down
- tc: db 0CH,'$',0 ;cursor right
- td: db 08H,'$',0 ;cursor left
- te: db esc,'*$',0 ;clear display (homes cursor)
- tf: db esc,')$',0 ;enter inverse video mode
- tg: db esc,'($',0 ;exit inverse video mode
- th: db 01EH,'$',0 ;home cursor
- ti: db 0BH,'$',0 ;reverse linefeed (insert line)
- tj: db esc,'Y$',0 ;clear to end of screen
- tk: db esc,'T$',0 ;clear to end of line
- ENDIF;soroq
-
- IF crt
- outlin: db cr,lf,'Starting ...$'
- erascr equ crlf ;"Home & clear" (best we can do).
- eralin: db '^U',cr,lf,'$' ;Clear line.
- prpack: db cr,lf,'RPack: $'
- pspack: db cr,lf,'SPack: $'
- ttab equ 0 ; no VT52 table
- ENDIF;crt
- ;
-
- IF tvi912
- vtval EQU 1 ; we do emulation
- defesc EQU '\'-100O ;Still Control-\ (just ran out of room...)
- ttytyp: db 'TVI912/920$'
- outlin: db 'Z'-64,0,0,cr,lf,'$'
- erascr: db 'Z'-64,0,0,'$' ;Clear screen and home
- eralin: db esc,'Y$',0 ;Clear to end of sreen
- curldn: db cr,esc,'=$' ;Cursor lead-in
- ttab: ;Table start location ;(MUST be 4 bytes each)
- ta: db 'K'-64,'$',0,0 ;Cursor up, stop at top
- tb: db 'J'-64,'$',0,0 ;Cursor down, stop at bottom
- tc: db 'L'-64,'$',0,0 ;Cursor right, stop at right
- td: db 'H'-64,'$',0,0 ;Cursor left, stop at left
- te: db 'Z'-64,0,0,'$' ;Clear display (2 pad nulls)
- tf: db '$',0,0,0 ;(can't) Enter Graphics mode
- tg: db '$',0,0,0 ;(can't) Exit Graphics mode
- th: db 1EH,'$',0,0 ;Cursor home
- ti: db esc,'j$',0 ;Reverse linefeed, scroll
- tj: db esc,'Y$',0 ;Clear to end of sreen
- tk: db esc,'T$',0 ;Clear to end of line
- ENDIF;tvi912
- ;
- ;
-
- IF tvi925
- ;(incidentally, works fine for Freedom 100 also [Toad Hall])
- ;adm3a entry and tvi925 entry separated to remove warning message.
- vtval EQU 1 ; we VT52 emulation
- defesc EQU '\'-100O ;Still Control-\ (just ran out of room...)
- ttytyp: db 'TVI925$'
- outlin: db 'Z'-64,0,0,cr,lf,'$'
- erascr: db 'Z'-64,0,0,'$' ;Clear screen and home
- eralin: db esc,'Y$',0 ;Clear to end of sreen
- curldn: db cr,esc,'=$' ;Cursor lead-in
- ttab: ;Table start location ;(MUST be 4 bytes each)
- ta: db 'K'-64,'$',0,0 ;Cursor up, stop at top
- tb: db 'V'-64,'$',0,0 ;Cursor down, stop at bottom
- tc: db 'L'-64,'$',0,0 ;Cursor right, stop at right
- td: db 'H'-64,'$',0,0 ;Cursor left, stop at left
- te: db 'Z'-64,0,0,'$' ;Clear display (2 pad nulls)
- tf: db '$',0,0,0 ;(can't) Enter Graphics mode
- tg: db '$',0,0,0 ;(can't) Exit Graphics mode
- th: db 1EH,'$',0,0 ;Cursor home
- ti: db esc,'j$',0 ;Reverse linefeed, scroll
- tj: db esc,'Y$',0 ;Clear to end of sreen
- tk: db esc,'T$',0 ;Clear to end of line
- ENDIF;tvi925
- ;
- ;
-
- IF adm3a
- defesc EQU '\'-100O ;Still Control-\ (just ran out of room...)
- ttytyp: db 'ADM3A$'
- outlin: db 'Z'-64,0,0,cr,lf,'$'
- erascr: db 'Z'-64,0,0,'$' ;Clear screen and home
- eralin: db esc,'Y$',0 ;Clear to end of sreen
- curldn: db cr,esc,'=$' ;Cursor lead-in
- ttab: ;Table start location ;(MUST be 4 bytes each)
- ta: db 'K'-64,'$',0,0 ;Cursor up, stop at top
- tb: db 'J'-64,'$',0,0 ;Cursor down CTRL-J
- tc: db 'L'-64,'$',0,0 ;Cursor right, stop at right
- td: db 'H'-64,'$',0,0 ;Cursor left, stop at left
- te: db 'Z'-64,0,0,'$' ;Clear display (2 pad nulls)
- tf: db '$',0,0,0 ;(can't) Enter Graphics mode
- tg: db '$',0,0,0 ;(can't) Exit Graphics mode
- th: db 1EH,'$',0,0 ;Cursor home
- ti: db 'K'-64,'$',0,0 ;Reverse linefeed
- tj: db '$',0,0,0 ;(can't) Clear to end of screen
- tk: db '$',0,0,0 ;(can't) Clear to end of line
- ENDIF;adm3a
-
-
- IF smrtvd ; [7] new terminal
- vtval EQU 1 ; we do VT52 emulation
- defesc EQU '\'-100O ; escpae character, ok?
- ttytyp: db 'Smartvid-80$'
- outlin: db esc,'+',cr,lf,tab,tab,'$'
- eralin: db cr,esc,'T$' ;Clear to end of line.
- erascr: db esc,'+$' ;Clear screen and go home.
- curldn: db esc,'=$' ;Cursor lead-in
- ttab: ;Table start location.
- ta: db ('K'-100O),'$',0,0 ;Cursor up.
- tb: db 12O,'$',0,0 ;Cursor down.
- tc: db ('A'-100O),'$',0,0 ;Cursor right.
- td: db ('H'-100O),'$',0,0 ;Cursor left.
- te: db ('L'-100O),'$',0,0 ;Clear screen and home cursor
- tf: db '$',0,0,0 ;(can't) Enter Graphics mode
- tg: db '$',0,0,0 ;(can't) Exit Graphics mode
- th: db ('Z'-100O),'$',0,0 ;Cursor home.
- ti: db ('K'-100O),'$',0,0 ;Reverse linefeed.
- tj: db esc,'Y$',0 ;Clear to end of screen.
- tk: db esc,'T$',0 ;Clear to end of line.
- ENDIF;smrtvd
-
- IF h1500
- vtval EQU 1 ; we can do VT52 emulation
- defesc EQU '\'-100O ;Still Control-\ (just ran out of room...)
- ttytyp: db 'Hazeltine$'
- outlin: db 7eh,1ch,7eh,12h,'$'
- erascr: db 7eh,1ch,7eh,12h,'$' ;Clear screen and home
- eralin: db 7eh,13h,'$',0 ;Clear to end of sreen
- curldn: db 7eh,11h,'$',0 ;Cursor lead-in
- ttab: ;Table start location ;(MUST be 4 bytes each)
- ta: db 7eh,0ch,'$',0 ;Cursor up, stop at top
- tb: db 7eh,0bh,'$',0 ;Cursor down CTRL-J
- tc: db 10h,'$',0,0 ;Cursor right, stop at right
- td: db 8h,'$',0,0 ;Cursor left, stop at left
- te: db 7eh,1ch,'$',0 ;Clear display (2 pad nulls)
- tf: db '$',0,0,0 ;(can't) Enter Graphics mode
- tg: db '$',0,0,0 ;(can't) Exit Graphics mode
- th: db 7eh,0ch,'$',0 ;Cursor home
- ti: db 7eh,0ch,'$',0 ;Reverse linefeed
- tj: db '$',0,0,0 ;(can't) Clear to end of screen
- tk: db 7eh,0fh,'$',0 ;Clear to end of line
- ENDIF;h1500
-
- IF wyse ;[gv]
- vtval equ 1 ; we can do VT52 emulation
- defesc EQU '\' ;Still Control-\ (just ran out of room...)
- ttytyp: db ' [Wyse 100]',cr,lf,'$'
- outlin: db esc,'+$',0 ;Clear screen and home
- erascr: db esc,'+$',0 ;Clear screen and home
- eralin: db esc,'Y$',0 ;Clear to end of sreen
- curldn: db cr,esc,'=$' ;Cursor lead-in
- ttab: ;Table start location ;(MUST be 4 bytes each)
- ta: db 03h,'$',0,0 ;Cursor up, stop at top
- tb: db lf,'$',0,0 ;Cursor down, stop at bottom
- tc: db ff,'$',0,0 ;Cursor right, stop at right
- td: db bs,'$',0,0 ;Cursor left, stop at left
- te: db sub,0,0,'$' ;Clear display (2 pad nulls)
- tf: db '$',0,0,0 ;Enter Graphics mode NONE
- tg: db '$',0,0,0 ;Exit Graphics mode NONE
- th: db 1eh,'$',0,0 ;Cursor home
- ti: db esc,'v$',0 ;Reverse linefeed, scroll ???
- tj: db esc,'Y$',0 ;Clear to end of sreen
- tk: db esc,'T$',0 ;Clear to end of line
- ENDIF;wyse
-
-
-
- ovlend equ $ ; End of overlay
-
- IF lasm ;Not really needed, as M80 ignores END in include files
- END
- ENDIF ;lasm
-